package com.ticket.system.mapper;

import java.util.Date;
import java.util.List;
import com.ticket.system.domain.YanchuConsumeRecord;
import com.ticket.system.domain.vo.ConsumeRecordVO;
import org.apache.ibatis.annotations.Param;

/**
 * 消费记录（包含充值）Mapper接口
 * 
 * @author ruoyi
 * @date 2023-12-12
 */
public interface YanchuConsumeRecordMapper 
{
    /**
     * 查询消费记录（包含充值）
     * 
     * @param id 消费记录（包含充值）主键
     * @return 消费记录（包含充值）
     */
    public YanchuConsumeRecord selectYanchuConsumeRecordById(Long id);

    /**
     * 查询消费记录（包含充值）列表
     * 
     * @param yanchuConsumeRecord 消费记录（包含充值）
     * @return 消费记录（包含充值）集合
     */
    public List<YanchuConsumeRecord> selectYanchuConsumeRecordList(YanchuConsumeRecord yanchuConsumeRecord);

    /**
     * 查询有效消费记录
     * @param orderId
     * @param userId
     * @return
     */
    public List<YanchuConsumeRecord> selectRecordList(@Param("orderId") Long orderId, @Param("userId")Long userId);

    /**
     * 新增消费记录（包含充值）
     * 
     * @param yanchuConsumeRecord 消费记录（包含充值）
     * @return 结果
     */
    public int insertYanchuConsumeRecord(YanchuConsumeRecord yanchuConsumeRecord);

    /**
     * 修改消费记录（包含充值）
     * 
     * @param yanchuConsumeRecord 消费记录（包含充值）
     * @return 结果
     */
    public int updateYanchuConsumeRecord(YanchuConsumeRecord yanchuConsumeRecord);

    /**
     * 删除消费记录（包含充值）
     * 
     * @param id 消费记录（包含充值）主键
     * @return 结果
     */
    public int deleteYanchuConsumeRecordById(Long id);

    /**
     * 批量删除消费记录（包含充值）
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteYanchuConsumeRecordByIds(Long[] ids);

    /**
     * 查询充值记录列表（pc 集团管理员和财务管理员）
     *
     * @param dayStartTime
     * @param dayEndTime
     * @param status
     * @param orderNo
     * @param keyName
     * @return
     */
    List<ConsumeRecordVO> rechargeList(@Param("dayStartTime") Date dayStartTime,
                                       @Param("dayEndTime") Date dayEndTime,
                                       @Param("status") Integer status,
                                       @Param("orderNo") String orderNo,
                                       @Param("keyName") String keyName);

    /**
     * 查询消费记录列表（pc 集团管理员和财务管理员）
     *
     * @param dayStartTime
     * @param dayEndTime
     * @param operaId
     * @param orderNo
     * @param keyName
     * @param cardNum
     * @param type
     * @return
     */
    List<ConsumeRecordVO> consumeList(@Param("dayStartTime") Date dayStartTime,
                                      @Param("dayEndTime") Date dayEndTime,
                                      @Param("operaId") Integer operaId,
                                      @Param("orderNo") String orderNo,
                                      @Param("keyName") String keyName,
                                      @Param("cardNum") String cardNum,
                                      @Param("type") Integer type);

    /**
     * 小程序用户消费记录（观演卡 储值卡）
     *
     * @param cardNum
     * @param type
     * @param userId
     * @return
     */
    List<ConsumeRecordVO> mobileList(@Param("cardNum") String cardNum,
                                         @Param("type") Integer type,
                                         @Param("userId") Long userId);
}
